// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Google Cloud DNS API Version v2beta1
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://developers.google.com/cloud-dns'>Google Cloud DNS API</a>
 *      <tr><th>API Version<td>v2beta1
 *      <tr><th>API Rev<td>20170221 (782)
 *      <tr><th>API Docs
 *          <td><a href='https://developers.google.com/cloud-dns'>
 *              https://developers.google.com/cloud-dns</a>
 *      <tr><th>Discovery Name<td>dns
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Google Cloud DNS API can be found at
 * <a href='https://developers.google.com/cloud-dns'>https://developers.google.com/cloud-dns</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.Dns.v2beta1
{
    /// <summary>The Dns Service.</summary>
    public class DnsService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v2beta1";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public DnsService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public DnsService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            changes = new ChangesResource(this);
            dnsKeys = new DnsKeysResource(this);
            managedZoneOperations = new ManagedZoneOperationsResource(this);
            managedZones = new ManagedZonesResource(this);
            projects = new ProjectsResource(this);
            resourceRecordSets = new ResourceRecordSetsResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "dns"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://www.googleapis.com/dns/v2beta1/projects/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return "dns/v2beta1/projects/"; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Google Cloud DNS API.</summary>
        public class Scope
        {
            /// <summary>View and manage your data across Google Cloud Platform services</summary>
            public static string CloudPlatform = "https://www.googleapis.com/auth/cloud-platform";

            /// <summary>View your data across Google Cloud Platform services</summary>
            public static string CloudPlatformReadOnly = "https://www.googleapis.com/auth/cloud-platform.read-only";

            /// <summary>View your DNS records hosted by Google Cloud DNS</summary>
            public static string NdevClouddnsReadonly = "https://www.googleapis.com/auth/ndev.clouddns.readonly";

            /// <summary>View and manage your DNS records hosted by Google Cloud DNS</summary>
            public static string NdevClouddnsReadwrite = "https://www.googleapis.com/auth/ndev.clouddns.readwrite";

        }



        private readonly ChangesResource changes;

        /// <summary>Gets the Changes resource.</summary>
        public virtual ChangesResource Changes
        {
            get { return changes; }
        }

        private readonly DnsKeysResource dnsKeys;

        /// <summary>Gets the DnsKeys resource.</summary>
        public virtual DnsKeysResource DnsKeys
        {
            get { return dnsKeys; }
        }

        private readonly ManagedZoneOperationsResource managedZoneOperations;

        /// <summary>Gets the ManagedZoneOperations resource.</summary>
        public virtual ManagedZoneOperationsResource ManagedZoneOperations
        {
            get { return managedZoneOperations; }
        }

        private readonly ManagedZonesResource managedZones;

        /// <summary>Gets the ManagedZones resource.</summary>
        public virtual ManagedZonesResource ManagedZones
        {
            get { return managedZones; }
        }

        private readonly ProjectsResource projects;

        /// <summary>Gets the Projects resource.</summary>
        public virtual ProjectsResource Projects
        {
            get { return projects; }
        }

        private readonly ResourceRecordSetsResource resourceRecordSets;

        /// <summary>Gets the ResourceRecordSets resource.</summary>
        public virtual ResourceRecordSetsResource ResourceRecordSets
        {
            get { return resourceRecordSets; }
        }
    }

    ///<summary>A base abstract class for Dns requests.</summary>
    public abstract class DnsBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new DnsBaseServiceRequest instance.</summary>
        protected DnsBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>Data format for the response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for the response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
        }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters. Overrides userIp if both are provided.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>IP address of the site where the request originates. Use this if you want to enforce per-user
        /// limits.</summary>
        [Google.Apis.Util.RequestParameterAttribute("userIp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UserIp { get; set; }

        /// <summary>Initializes Dns parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "userIp", new Google.Apis.Discovery.Parameter
                {
                    Name = "userIp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "changes" collection of methods.</summary>
    public class ChangesResource
    {
        private const string Resource = "changes";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ChangesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Atomically update the ResourceRecordSet collection.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">Identifies the project addressed by this request.</param>
        /// <param
        /// name="managedZone">Identifies the managed zone addressed by this request. Can be the managed zone name or
        /// id.</param>
        public virtual CreateRequest Create(Google.Apis.Dns.v2beta1.Data.Change body, string project, string managedZone)
        {
            return new CreateRequest(service, body, project, managedZone);
        }

        /// <summary>Atomically update the ResourceRecordSet collection.</summary>
        public class CreateRequest : DnsBaseServiceRequest<Google.Apis.Dns.v2beta1.Data.Change>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Dns.v2beta1.Data.Change body, string project, string managedZone)
                : base(service)
            {
                Project = project;
                ManagedZone = managedZone;
                Body = body;
                InitParameters();
            }


            /// <summary>Identifies the project addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Identifies the managed zone addressed by this request. Can be the managed zone name or
            /// id.</summary>
            [Google.Apis.Util.RequestParameterAttribute("managedZone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ManagedZone { get; private set; }

            /// <summary>For mutating operation requests only. An optional identifier specified by the client. Must be
            /// unique for operation resources in the Operations collection.</summary>
            [Google.Apis.Util.RequestParameterAttribute("clientOperationId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ClientOperationId { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Dns.v2beta1.Data.Change Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "create"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/managedZones/{managedZone}/changes"; }
            }

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "managedZone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "managedZone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "clientOperationId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "clientOperationId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Fetch the representation of an existing Change.</summary>
        /// <param name="project">Identifies the project addressed by this request.</param>
        /// <param
        /// name="managedZone">Identifies the managed zone addressed by this request. Can be the managed zone name or
        /// id.</param>
        /// <param name="changeId">The identifier of the requested change, from a previous
        /// ResourceRecordSetsChangeResponse.</param>
        public virtual GetRequest Get(string project, string managedZone, string changeId)
        {
            return new GetRequest(service, project, managedZone, changeId);
        }

        /// <summary>Fetch the representation of an existing Change.</summary>
        public class GetRequest : DnsBaseServiceRequest<Google.Apis.Dns.v2beta1.Data.Change>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string project, string managedZone, string changeId)
                : base(service)
            {
                Project = project;
                ManagedZone = managedZone;
                ChangeId = changeId;
                InitParameters();
            }


            /// <summary>Identifies the project addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Identifies the managed zone addressed by this request. Can be the managed zone name or
            /// id.</summary>
            [Google.Apis.Util.RequestParameterAttribute("managedZone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ManagedZone { get; private set; }

            /// <summary>The identifier of the requested change, from a previous
            /// ResourceRecordSetsChangeResponse.</summary>
            [Google.Apis.Util.RequestParameterAttribute("changeId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ChangeId { get; private set; }

            /// <summary>For mutating operation requests only. An optional identifier specified by the client. Must be
            /// unique for operation resources in the Operations collection.</summary>
            [Google.Apis.Util.RequestParameterAttribute("clientOperationId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ClientOperationId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/managedZones/{managedZone}/changes/{changeId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "managedZone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "managedZone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "changeId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "changeId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "clientOperationId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "clientOperationId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Enumerate Changes to a ResourceRecordSet collection.</summary>
        /// <param name="project">Identifies the project addressed by this request.</param>
        /// <param
        /// name="managedZone">Identifies the managed zone addressed by this request. Can be the managed zone name or
        /// id.</param>
        public virtual ListRequest List(string project, string managedZone)
        {
            return new ListRequest(service, project, managedZone);
        }

        /// <summary>Enumerate Changes to a ResourceRecordSet collection.</summary>
        public class ListRequest : DnsBaseServiceRequest<Google.Apis.Dns.v2beta1.Data.ChangesListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string project, string managedZone)
                : base(service)
            {
                Project = project;
                ManagedZone = managedZone;
                InitParameters();
            }


            /// <summary>Identifies the project addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Identifies the managed zone addressed by this request. Can be the managed zone name or
            /// id.</summary>
            [Google.Apis.Util.RequestParameterAttribute("managedZone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ManagedZone { get; private set; }

            /// <summary>Optional. Maximum number of results to be returned. If unspecified, the server will decide how
            /// many results to return.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> MaxResults { get; set; }

            /// <summary>Optional. A tag returned by a previous list request that was truncated. Use this parameter to
            /// continue a previous list request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Sorting criterion. The only supported value is change sequence.</summary>
            /// [default: CHANGE_SEQUENCE]
            [Google.Apis.Util.RequestParameterAttribute("sortBy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<SortByEnum> SortBy { get; set; }

            /// <summary>Sorting criterion. The only supported value is change sequence.</summary>
            public enum SortByEnum
            {
                [Google.Apis.Util.StringValueAttribute("CHANGE_SEQUENCE")]
                CHANGESEQUENCE,
            }

            /// <summary>Sorting order direction: 'ascending' or 'descending'.</summary>
            [Google.Apis.Util.RequestParameterAttribute("sortOrder", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string SortOrder { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/managedZones/{managedZone}/changes"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "managedZone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "managedZone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "sortBy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "sortBy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "CHANGE_SEQUENCE",
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "sortOrder", new Google.Apis.Discovery.Parameter
                    {
                        Name = "sortOrder",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "dnsKeys" collection of methods.</summary>
    public class DnsKeysResource
    {
        private const string Resource = "dnsKeys";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public DnsKeysResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Fetch the representation of an existing DnsKey.</summary>
        /// <param name="project">Identifies the project addressed by this request.</param>
        /// <param
        /// name="managedZone">Identifies the managed zone addressed by this request. Can be the managed zone name or
        /// id.</param>
        /// <param name="dnsKeyId">The identifier of the requested DnsKey.</param>
        public virtual GetRequest Get(string project, string managedZone, string dnsKeyId)
        {
            return new GetRequest(service, project, managedZone, dnsKeyId);
        }

        /// <summary>Fetch the representation of an existing DnsKey.</summary>
        public class GetRequest : DnsBaseServiceRequest<Google.Apis.Dns.v2beta1.Data.DnsKey>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string project, string managedZone, string dnsKeyId)
                : base(service)
            {
                Project = project;
                ManagedZone = managedZone;
                DnsKeyId = dnsKeyId;
                InitParameters();
            }


            /// <summary>Identifies the project addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Identifies the managed zone addressed by this request. Can be the managed zone name or
            /// id.</summary>
            [Google.Apis.Util.RequestParameterAttribute("managedZone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ManagedZone { get; private set; }

            /// <summary>The identifier of the requested DnsKey.</summary>
            [Google.Apis.Util.RequestParameterAttribute("dnsKeyId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string DnsKeyId { get; private set; }

            /// <summary>For mutating operation requests only. An optional identifier specified by the client. Must be
            /// unique for operation resources in the Operations collection.</summary>
            [Google.Apis.Util.RequestParameterAttribute("clientOperationId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ClientOperationId { get; set; }

            /// <summary>An optional comma-separated list of digest types to compute and display for key signing keys.
            /// If omitted, the recommended digest type will be computed and displayed.</summary>
            [Google.Apis.Util.RequestParameterAttribute("digestType", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string DigestType { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/managedZones/{managedZone}/dnsKeys/{dnsKeyId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "managedZone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "managedZone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "dnsKeyId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "dnsKeyId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "clientOperationId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "clientOperationId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "digestType", new Google.Apis.Discovery.Parameter
                    {
                        Name = "digestType",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Enumerate DnsKeys to a ResourceRecordSet collection.</summary>
        /// <param name="project">Identifies the project addressed by this request.</param>
        /// <param
        /// name="managedZone">Identifies the managed zone addressed by this request. Can be the managed zone name or
        /// id.</param>
        public virtual ListRequest List(string project, string managedZone)
        {
            return new ListRequest(service, project, managedZone);
        }

        /// <summary>Enumerate DnsKeys to a ResourceRecordSet collection.</summary>
        public class ListRequest : DnsBaseServiceRequest<Google.Apis.Dns.v2beta1.Data.DnsKeysListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string project, string managedZone)
                : base(service)
            {
                Project = project;
                ManagedZone = managedZone;
                InitParameters();
            }


            /// <summary>Identifies the project addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Identifies the managed zone addressed by this request. Can be the managed zone name or
            /// id.</summary>
            [Google.Apis.Util.RequestParameterAttribute("managedZone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ManagedZone { get; private set; }

            /// <summary>An optional comma-separated list of digest types to compute and display for key signing keys.
            /// If omitted, the recommended digest type will be computed and displayed.</summary>
            [Google.Apis.Util.RequestParameterAttribute("digestType", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string DigestType { get; set; }

            /// <summary>Optional. Maximum number of results to be returned. If unspecified, the server will decide how
            /// many results to return.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> MaxResults { get; set; }

            /// <summary>Optional. A tag returned by a previous list request that was truncated. Use this parameter to
            /// continue a previous list request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/managedZones/{managedZone}/dnsKeys"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "managedZone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "managedZone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "digestType", new Google.Apis.Discovery.Parameter
                    {
                        Name = "digestType",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "managedZoneOperations" collection of methods.</summary>
    public class ManagedZoneOperationsResource
    {
        private const string Resource = "managedZoneOperations";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ManagedZoneOperationsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Fetch the representation of an existing Operation.</summary>
        /// <param name="project">Identifies the project addressed by this request.</param>
        /// <param
        /// name="managedZone">Identifies the managed zone addressed by this request.</param>
        /// <param
        /// name="operation">Identifies the operation addressed by this request.</param>
        public virtual GetRequest Get(string project, string managedZone, string operation)
        {
            return new GetRequest(service, project, managedZone, operation);
        }

        /// <summary>Fetch the representation of an existing Operation.</summary>
        public class GetRequest : DnsBaseServiceRequest<Google.Apis.Dns.v2beta1.Data.Operation>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string project, string managedZone, string operation)
                : base(service)
            {
                Project = project;
                ManagedZone = managedZone;
                Operation = operation;
                InitParameters();
            }


            /// <summary>Identifies the project addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Identifies the managed zone addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("managedZone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ManagedZone { get; private set; }

            /// <summary>Identifies the operation addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("operation", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Operation { get; private set; }

            /// <summary>For mutating operation requests only. An optional identifier specified by the client. Must be
            /// unique for operation resources in the Operations collection.</summary>
            [Google.Apis.Util.RequestParameterAttribute("clientOperationId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ClientOperationId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/managedZones/{managedZone}/operations/{operation}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "managedZone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "managedZone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "operation", new Google.Apis.Discovery.Parameter
                    {
                        Name = "operation",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "clientOperationId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "clientOperationId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Enumerate Operations for the given ManagedZone.</summary>
        /// <param name="project">Identifies the project addressed by this request.</param>
        /// <param
        /// name="managedZone">Identifies the managed zone addressed by this request.</param>
        public virtual ListRequest List(string project, string managedZone)
        {
            return new ListRequest(service, project, managedZone);
        }

        /// <summary>Enumerate Operations for the given ManagedZone.</summary>
        public class ListRequest : DnsBaseServiceRequest<Google.Apis.Dns.v2beta1.Data.ManagedZoneOperationsListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string project, string managedZone)
                : base(service)
            {
                Project = project;
                ManagedZone = managedZone;
                InitParameters();
            }


            /// <summary>Identifies the project addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Identifies the managed zone addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("managedZone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ManagedZone { get; private set; }

            /// <summary>Optional. Maximum number of results to be returned. If unspecified, the server will decide how
            /// many results to return.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> MaxResults { get; set; }

            /// <summary>Optional. A tag returned by a previous list request that was truncated. Use this parameter to
            /// continue a previous list request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Sorting criterion. The only supported values are START_TIME and ID.</summary>
            /// [default: START_TIME]
            [Google.Apis.Util.RequestParameterAttribute("sortBy", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<SortByEnum> SortBy { get; set; }

            /// <summary>Sorting criterion. The only supported values are START_TIME and ID.</summary>
            public enum SortByEnum
            {
                [Google.Apis.Util.StringValueAttribute("ID")]
                ID,
                [Google.Apis.Util.StringValueAttribute("START_TIME")]
                STARTTIME,
            }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/managedZones/{managedZone}/operations"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "managedZone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "managedZone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "sortBy", new Google.Apis.Discovery.Parameter
                    {
                        Name = "sortBy",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = "START_TIME",
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "managedZones" collection of methods.</summary>
    public class ManagedZonesResource
    {
        private const string Resource = "managedZones";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ManagedZonesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Create a new ManagedZone.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">Identifies the project addressed by this request.</param>
        public virtual CreateRequest Create(Google.Apis.Dns.v2beta1.Data.ManagedZone body, string project)
        {
            return new CreateRequest(service, body, project);
        }

        /// <summary>Create a new ManagedZone.</summary>
        public class CreateRequest : DnsBaseServiceRequest<Google.Apis.Dns.v2beta1.Data.ManagedZone>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Dns.v2beta1.Data.ManagedZone body, string project)
                : base(service)
            {
                Project = project;
                Body = body;
                InitParameters();
            }


            /// <summary>Identifies the project addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>For mutating operation requests only. An optional identifier specified by the client. Must be
            /// unique for operation resources in the Operations collection.</summary>
            [Google.Apis.Util.RequestParameterAttribute("clientOperationId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ClientOperationId { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Dns.v2beta1.Data.ManagedZone Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "create"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/managedZones"; }
            }

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "clientOperationId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "clientOperationId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Delete a previously created ManagedZone.</summary>
        /// <param name="project">Identifies the project addressed by this request.</param>
        /// <param
        /// name="managedZone">Identifies the managed zone addressed by this request. Can be the managed zone name or
        /// id.</param>
        public virtual DeleteRequest Delete(string project, string managedZone)
        {
            return new DeleteRequest(service, project, managedZone);
        }

        /// <summary>Delete a previously created ManagedZone.</summary>
        public class DeleteRequest : DnsBaseServiceRequest<Google.Apis.Dns.v2beta1.Data.ManagedZonesDeleteResponse>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string project, string managedZone)
                : base(service)
            {
                Project = project;
                ManagedZone = managedZone;
                InitParameters();
            }


            /// <summary>Identifies the project addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Identifies the managed zone addressed by this request. Can be the managed zone name or
            /// id.</summary>
            [Google.Apis.Util.RequestParameterAttribute("managedZone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ManagedZone { get; private set; }

            /// <summary>For mutating operation requests only. An optional identifier specified by the client. Must be
            /// unique for operation resources in the Operations collection.</summary>
            [Google.Apis.Util.RequestParameterAttribute("clientOperationId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ClientOperationId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/managedZones/{managedZone}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "managedZone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "managedZone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "clientOperationId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "clientOperationId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Fetch the representation of an existing ManagedZone.</summary>
        /// <param name="project">Identifies the project addressed by this request.</param>
        /// <param
        /// name="managedZone">Identifies the managed zone addressed by this request. Can be the managed zone name or
        /// id.</param>
        public virtual GetRequest Get(string project, string managedZone)
        {
            return new GetRequest(service, project, managedZone);
        }

        /// <summary>Fetch the representation of an existing ManagedZone.</summary>
        public class GetRequest : DnsBaseServiceRequest<Google.Apis.Dns.v2beta1.Data.ManagedZone>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string project, string managedZone)
                : base(service)
            {
                Project = project;
                ManagedZone = managedZone;
                InitParameters();
            }


            /// <summary>Identifies the project addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Identifies the managed zone addressed by this request. Can be the managed zone name or
            /// id.</summary>
            [Google.Apis.Util.RequestParameterAttribute("managedZone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ManagedZone { get; private set; }

            /// <summary>For mutating operation requests only. An optional identifier specified by the client. Must be
            /// unique for operation resources in the Operations collection.</summary>
            [Google.Apis.Util.RequestParameterAttribute("clientOperationId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ClientOperationId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/managedZones/{managedZone}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "managedZone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "managedZone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "clientOperationId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "clientOperationId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Enumerate ManagedZones that have been created but not yet deleted.</summary>
        /// <param name="project">Identifies the project addressed by this request.</param>
        public virtual ListRequest List(string project)
        {
            return new ListRequest(service, project);
        }

        /// <summary>Enumerate ManagedZones that have been created but not yet deleted.</summary>
        public class ListRequest : DnsBaseServiceRequest<Google.Apis.Dns.v2beta1.Data.ManagedZonesListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string project)
                : base(service)
            {
                Project = project;
                InitParameters();
            }


            /// <summary>Identifies the project addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Restricts the list to return only zones with this domain name.</summary>
            [Google.Apis.Util.RequestParameterAttribute("dnsName", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string DnsName { get; set; }

            /// <summary>Optional. Maximum number of results to be returned. If unspecified, the server will decide how
            /// many results to return.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> MaxResults { get; set; }

            /// <summary>Optional. A tag returned by a previous list request that was truncated. Use this parameter to
            /// continue a previous list request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/managedZones"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "dnsName", new Google.Apis.Discovery.Parameter
                    {
                        Name = "dnsName",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Update an existing ManagedZone. This method supports patch semantics.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">Identifies the project addressed by this request.</param>
        /// <param
        /// name="managedZone">Identifies the managed zone addressed by this request. Can be the managed zone name or
        /// id.</param>
        public virtual PatchRequest Patch(Google.Apis.Dns.v2beta1.Data.ManagedZone body, string project, string managedZone)
        {
            return new PatchRequest(service, body, project, managedZone);
        }

        /// <summary>Update an existing ManagedZone. This method supports patch semantics.</summary>
        public class PatchRequest : DnsBaseServiceRequest<Google.Apis.Dns.v2beta1.Data.Operation>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Dns.v2beta1.Data.ManagedZone body, string project, string managedZone)
                : base(service)
            {
                Project = project;
                ManagedZone = managedZone;
                Body = body;
                InitParameters();
            }


            /// <summary>Identifies the project addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Identifies the managed zone addressed by this request. Can be the managed zone name or
            /// id.</summary>
            [Google.Apis.Util.RequestParameterAttribute("managedZone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ManagedZone { get; private set; }

            /// <summary>For mutating operation requests only. An optional identifier specified by the client. Must be
            /// unique for operation resources in the Operations collection.</summary>
            [Google.Apis.Util.RequestParameterAttribute("clientOperationId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ClientOperationId { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Dns.v2beta1.Data.ManagedZone Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/managedZones/{managedZone}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "managedZone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "managedZone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "clientOperationId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "clientOperationId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Update an existing ManagedZone.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="project">Identifies the project addressed by this request.</param>
        /// <param
        /// name="managedZone">Identifies the managed zone addressed by this request. Can be the managed zone name or
        /// id.</param>
        public virtual UpdateRequest Update(Google.Apis.Dns.v2beta1.Data.ManagedZone body, string project, string managedZone)
        {
            return new UpdateRequest(service, body, project, managedZone);
        }

        /// <summary>Update an existing ManagedZone.</summary>
        public class UpdateRequest : DnsBaseServiceRequest<Google.Apis.Dns.v2beta1.Data.Operation>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.Dns.v2beta1.Data.ManagedZone body, string project, string managedZone)
                : base(service)
            {
                Project = project;
                ManagedZone = managedZone;
                Body = body;
                InitParameters();
            }


            /// <summary>Identifies the project addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Identifies the managed zone addressed by this request. Can be the managed zone name or
            /// id.</summary>
            [Google.Apis.Util.RequestParameterAttribute("managedZone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ManagedZone { get; private set; }

            /// <summary>For mutating operation requests only. An optional identifier specified by the client. Must be
            /// unique for operation resources in the Operations collection.</summary>
            [Google.Apis.Util.RequestParameterAttribute("clientOperationId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ClientOperationId { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Dns.v2beta1.Data.ManagedZone Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "update"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PUT"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/managedZones/{managedZone}"; }
            }

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "managedZone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "managedZone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "clientOperationId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "clientOperationId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "projects" collection of methods.</summary>
    public class ProjectsResource
    {
        private const string Resource = "projects";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ProjectsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Fetch the representation of an existing Project.</summary>
        /// <param name="project">Identifies the project addressed by this request.</param>
        public virtual GetRequest Get(string project)
        {
            return new GetRequest(service, project);
        }

        /// <summary>Fetch the representation of an existing Project.</summary>
        public class GetRequest : DnsBaseServiceRequest<Google.Apis.Dns.v2beta1.Data.Project>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string project)
                : base(service)
            {
                Project = project;
                InitParameters();
            }


            /// <summary>Identifies the project addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>For mutating operation requests only. An optional identifier specified by the client. Must be
            /// unique for operation resources in the Operations collection.</summary>
            [Google.Apis.Util.RequestParameterAttribute("clientOperationId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ClientOperationId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "clientOperationId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "clientOperationId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "resourceRecordSets" collection of methods.</summary>
    public class ResourceRecordSetsResource
    {
        private const string Resource = "resourceRecordSets";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ResourceRecordSetsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Enumerate ResourceRecordSets that have been created but not yet deleted.</summary>
        /// <param name="project">Identifies the project addressed by this request.</param>
        /// <param
        /// name="managedZone">Identifies the managed zone addressed by this request. Can be the managed zone name or
        /// id.</param>
        public virtual ListRequest List(string project, string managedZone)
        {
            return new ListRequest(service, project, managedZone);
        }

        /// <summary>Enumerate ResourceRecordSets that have been created but not yet deleted.</summary>
        public class ListRequest : DnsBaseServiceRequest<Google.Apis.Dns.v2beta1.Data.ResourceRecordSetsListResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string project, string managedZone)
                : base(service)
            {
                Project = project;
                ManagedZone = managedZone;
                InitParameters();
            }


            /// <summary>Identifies the project addressed by this request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("project", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Project { get; private set; }

            /// <summary>Identifies the managed zone addressed by this request. Can be the managed zone name or
            /// id.</summary>
            [Google.Apis.Util.RequestParameterAttribute("managedZone", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ManagedZone { get; private set; }

            /// <summary>Optional. Maximum number of results to be returned. If unspecified, the server will decide how
            /// many results to return.</summary>
            [Google.Apis.Util.RequestParameterAttribute("maxResults", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> MaxResults { get; set; }

            /// <summary>Restricts the list to return only records with this fully qualified domain name.</summary>
            [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Name { get; set; }

            /// <summary>Optional. A tag returned by a previous list request that was truncated. Use this parameter to
            /// continue a previous list request.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>Restricts the list to return only records of this type. If present, the "name" parameter must
            /// also be present.</summary>
            [Google.Apis.Util.RequestParameterAttribute("type", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Type { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "{project}/managedZones/{managedZone}/rrsets"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "project", new Google.Apis.Discovery.Parameter
                    {
                        Name = "project",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "managedZone", new Google.Apis.Discovery.Parameter
                    {
                        Name = "managedZone",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "maxResults", new Google.Apis.Discovery.Parameter
                    {
                        Name = "maxResults",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "name", new Google.Apis.Discovery.Parameter
                    {
                        Name = "name",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "type", new Google.Apis.Discovery.Parameter
                    {
                        Name = "type",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }
}

namespace Google.Apis.Dns.v2beta1.Data
{    

    /// <summary>An atomic update to a collection of ResourceRecordSets.</summary>
    public class Change : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Which ResourceRecordSets to add?</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("additions")]
        public virtual System.Collections.Generic.IList<ResourceRecordSet> Additions { get; set; } 

        /// <summary>Which ResourceRecordSets to remove? Must match existing data exactly.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("deletions")]
        public virtual System.Collections.Generic.IList<ResourceRecordSet> Deletions { get; set; } 

        /// <summary>Unique identifier for the resource; defined by the server (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>If the DNS queries for the zone will be served.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isServing")]
        public virtual System.Nullable<bool> IsServing { get; set; } 

        /// <summary>Identifies what kind of resource this is. Value: the fixed string "dns#change".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The time that this operation was started by the server (output only). This is in RFC3339 text
        /// format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startTime")]
        public virtual string StartTime { get; set; } 

        /// <summary>Status of the operation (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response to a request to enumerate Changes to a ResourceRecordSets collection.</summary>
    public class ChangesListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The requested changes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("changes")]
        public virtual System.Collections.Generic.IList<Change> Changes { get; set; } 

        [Newtonsoft.Json.JsonPropertyAttribute("header")]
        public virtual ResponseHeader Header { get; set; } 

        /// <summary>Type of resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The presence of this field indicates that there exist more results following your last page of
        /// results in pagination order. To fetch them, make another list request using this value as your pagination
        /// token.
        ///
        /// In this way you can retrieve the complete contents of even very large collections one page at a time.
        /// However, if the contents of the collection change between the first and last paginated list request, the set
        /// of all elements returned will be an inconsistent view of the collection. There is no way to retrieve a
        /// "snapshot" of collections larger than the maximum page size.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A DNSSEC key pair.</summary>
    public class DnsKey : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>String mnemonic specifying the DNSSEC algorithm of this key. Immutable after creation
        /// time.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("algorithm")]
        public virtual string Algorithm { get; set; } 

        /// <summary>The time that this resource was created in the control plane. This is in RFC3339 text format.
        /// Output only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creationTime")]
        public virtual string CreationTime { get; set; } 

        /// <summary>A mutable string of at most 1024 characters associated with this resource for the user's
        /// convenience. Has no effect on the resource's function.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>Cryptographic hashes of the DNSKEY resource record associated with this DnsKey. These digests are
        /// needed to construct a DS record that points at this DNS key. Output only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("digests")]
        public virtual System.Collections.Generic.IList<DnsKeyDigest> Digests { get; set; } 

        /// <summary>Unique identifier for the resource; defined by the server (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Active keys will be used to sign subsequent changes to the ManagedZone. Inactive keys will still be
        /// present as DNSKEY Resource Records for the use of resolvers validating existing signatures.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("isActive")]
        public virtual System.Nullable<bool> IsActive { get; set; } 

        /// <summary>Length of the key in bits. Specified at creation time then immutable.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("keyLength")]
        public virtual System.Nullable<long> KeyLength { get; set; } 

        /// <summary>The key tag is a non-cryptographic hash of the a DNSKEY resource record associated with this
        /// DnsKey. The key tag can be used to identify a DNSKEY more quickly (but it is not a unique identifier). In
        /// particular, the key tag is used in a parent zone's DS record to point at the DNSKEY in this child
        /// ManagedZone. The key tag is a number in the range [0, 65535] and the algorithm to calculate it is specified
        /// in RFC4034 Appendix B. Output only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("keyTag")]
        public virtual System.Nullable<int> KeyTag { get; set; } 

        /// <summary>Identifies what kind of resource this is. Value: the fixed string "dns#dnsKey".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Base64 encoded public half of this key. Output only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("publicKey")]
        public virtual string PublicKey { get; set; } 

        /// <summary>One of "KEY_SIGNING" or "ZONE_SIGNING". Keys of type KEY_SIGNING have the Secure Entry Point flag
        /// set and, when active, will be used to sign only resource record sets of type DNSKEY. Otherwise, the Secure
        /// Entry Point flag will be cleared and this key will be used to sign only resource record sets of other types.
        /// Immutable after creation time.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class DnsKeyDigest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The base-16 encoded bytes of this digest. Suitable for use in a DS resource record.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("digest")]
        public virtual string Digest { get; set; } 

        /// <summary>Specifies the algorithm used to calculate this digest.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Parameters for DnsKey key generation. Used for generating initial keys for a new ManagedZone and as
    /// default when adding a new DnsKey.</summary>
    public class DnsKeySpec : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>String mnemonic specifying the DNSSEC algorithm of this key.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("algorithm")]
        public virtual string Algorithm { get; set; } 

        /// <summary>Length of the keys in bits.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("keyLength")]
        public virtual System.Nullable<long> KeyLength { get; set; } 

        /// <summary>One of "KEY_SIGNING" or "ZONE_SIGNING". Keys of type KEY_SIGNING have the Secure Entry Point flag
        /// set and, when active, will be used to sign only resource record sets of type DNSKEY. Otherwise, the Secure
        /// Entry Point flag will be cleared and this key will be used to sign only resource record sets of other
        /// types.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("keyType")]
        public virtual string KeyType { get; set; } 

        /// <summary>Identifies what kind of resource this is. Value: the fixed string "dns#dnsKeySpec".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response to a request to enumerate DnsKeys in a ManagedZone.</summary>
    public class DnsKeysListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The requested resources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dnsKeys")]
        public virtual System.Collections.Generic.IList<DnsKey> DnsKeys { get; set; } 

        [Newtonsoft.Json.JsonPropertyAttribute("header")]
        public virtual ResponseHeader Header { get; set; } 

        /// <summary>Type of resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The presence of this field indicates that there exist more results following your last page of
        /// results in pagination order. To fetch them, make another list request using this value as your pagination
        /// token.
        ///
        /// In this way you can retrieve the complete contents of even very large collections one page at a time.
        /// However, if the contents of the collection change between the first and last paginated list request, the set
        /// of all elements returned will be an inconsistent view of the collection. There is no way to retrieve a
        /// "snapshot" of collections larger than the maximum page size.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A zone is a subtree of the DNS namespace under one administrative responsibility. A ManagedZone is a
    /// resource that represents a DNS zone hosted by the Cloud DNS service.</summary>
    public class ManagedZone : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The time that this resource was created on the server. This is in RFC3339 text format. Output
        /// only.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("creationTime")]
        public virtual string CreationTime { get; set; } 

        /// <summary>A mutable string of at most 1024 characters associated with this resource for the user's
        /// convenience. Has no effect on the managed zone's function.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>The DNS name of this managed zone, for instance "example.com.".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dnsName")]
        public virtual string DnsName { get; set; } 

        /// <summary>DNSSEC configuration.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dnssecConfig")]
        public virtual ManagedZoneDnsSecConfig DnssecConfig { get; set; } 

        /// <summary>Unique identifier for the resource; defined by the server (output only)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual System.Nullable<ulong> Id { get; set; } 

        /// <summary>Identifies what kind of resource this is. Value: the fixed string "dns#managedZone".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>User assigned name for this resource. Must be unique within the project. The name must be 1-63
        /// characters long, must begin with a letter, end with a letter or digit, and only contain lowercase letters,
        /// digits or dashes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>Optionally specifies the NameServerSet for this ManagedZone. A NameServerSet is a set of DNS name
        /// servers that all host the same ManagedZones. Most users will leave this field unset.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nameServerSet")]
        public virtual string NameServerSet { get; set; } 

        /// <summary>Delegate your managed_zone to these virtual name servers; defined by the server (output
        /// only)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nameServers")]
        public virtual System.Collections.Generic.IList<string> NameServers { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class ManagedZoneDnsSecConfig : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Specifies parameters that will be used for generating initial DnsKeys for this ManagedZone. Output
        /// only while state is not OFF.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("defaultKeySpecs")]
        public virtual System.Collections.Generic.IList<DnsKeySpec> DefaultKeySpecs { get; set; } 

        /// <summary>Identifies what kind of resource this is. Value: the fixed string
        /// "dns#managedZoneDnsSecConfig".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Specifies the mechanism used to provide authenticated denial-of-existence responses. Output only
        /// while state is not OFF.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nonExistence")]
        public virtual string NonExistence { get; set; } 

        /// <summary>Specifies whether DNSSEC is enabled, and what mode it is in.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("state")]
        public virtual string State { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class ManagedZoneOperationsListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("header")]
        public virtual ResponseHeader Header { get; set; } 

        /// <summary>Type of resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The presence of this field indicates that there exist more results following your last page of
        /// results in pagination order. To fetch them, make another list request using this value as your page token.
        ///
        /// In this way you can retrieve the complete contents of even very large collections one page at a time.
        /// However, if the contents of the collection change between the first and last paginated list request, the set
        /// of all elements returned will be an inconsistent view of the collection. There is no way to retrieve a
        /// consistent snapshot of a collection larger than the maximum page size.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The operation resources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operations")]
        public virtual System.Collections.Generic.IList<Operation> Operations { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class ManagedZonesDeleteResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("header")]
        public virtual ResponseHeader Header { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class ManagedZonesListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("header")]
        public virtual ResponseHeader Header { get; set; } 

        /// <summary>Type of resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The managed zone resources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("managedZones")]
        public virtual System.Collections.Generic.IList<ManagedZone> ManagedZones { get; set; } 

        /// <summary>The presence of this field indicates that there exist more results following your last page of
        /// results in pagination order. To fetch them, make another list request using this value as your page token.
        ///
        /// In this way you can retrieve the complete contents of even very large collections one page at a time.
        /// However, if the contents of the collection change between the first and last paginated list request, the set
        /// of all elements returned will be an inconsistent view of the collection. There is no way to retrieve a
        /// consistent snapshot of a collection larger than the maximum page size.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An operation represents a successful mutation performed on a Cloud DNS resource. Operations provide: -
    /// An audit log of server resource mutations. - A way to recover/retry API calls in the case where the response is
    /// never received by the caller. Use the caller specified client_operation_id.</summary>
    public class Operation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Only populated if the operation targeted a DnsKey (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dnsKeyContext")]
        public virtual OperationDnsKeyContext DnsKeyContext { get; set; } 

        /// <summary>Unique identifier for the resource. This is the client_operation_id if the client specified it when
        /// the mutation was initiated, otherwise, it is generated by the server. The name must be 1-63 characters long
        /// and match the regular expression [-a-z0-9]? (output only)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Identifies what kind of resource this is. Value: the fixed string "dns#operation".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The time that this operation was started by the server. This is in RFC3339 text format (output
        /// only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startTime")]
        public virtual string StartTime { get; set; } 

        /// <summary>Status of the operation. Can be one of the following: "PENDING" or "DONE" (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual string Status { get; set; } 

        /// <summary>Type of the operation. Operations include insert, update, and delete (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>User who requested the operation, for example: user@example.com. cloud-dns-system for operations
        /// automatically done by the system. (output only)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("user")]
        public virtual string User { get; set; } 

        /// <summary>Only populated if the operation targeted a ManagedZone (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("zoneContext")]
        public virtual OperationManagedZoneContext ZoneContext { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class OperationDnsKeyContext : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The post-operation DnsKey resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("newValue")]
        public virtual DnsKey NewValue { get; set; } 

        /// <summary>The pre-operation DnsKey resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("oldValue")]
        public virtual DnsKey OldValue { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class OperationManagedZoneContext : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The post-operation ManagedZone resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("newValue")]
        public virtual ManagedZone NewValue { get; set; } 

        /// <summary>The pre-operation ManagedZone resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("oldValue")]
        public virtual ManagedZone OldValue { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A project resource. The project is a top level container for resources including Cloud DNS
    /// ManagedZones. Projects can be created only in the APIs console.</summary>
    public class Project : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>User assigned unique identifier for the resource (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Identifies what kind of resource this is. Value: the fixed string "dns#project".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Unique numeric identifier for the resource; defined by the server (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("number")]
        public virtual System.Nullable<ulong> Number { get; set; } 

        /// <summary>Quotas assigned to this project (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quota")]
        public virtual Quota Quota { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Limits associated with a Project.</summary>
    public class Quota : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Maximum allowed number of DnsKeys per ManagedZone.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("dnsKeysPerManagedZone")]
        public virtual System.Nullable<int> DnsKeysPerManagedZone { get; set; } 

        /// <summary>Identifies what kind of resource this is. Value: the fixed string "dns#quota".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>Maximum allowed number of managed zones in the project.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("managedZones")]
        public virtual System.Nullable<int> ManagedZones { get; set; } 

        /// <summary>Maximum allowed number of ResourceRecords per ResourceRecordSet.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("resourceRecordsPerRrset")]
        public virtual System.Nullable<int> ResourceRecordsPerRrset { get; set; } 

        /// <summary>Maximum allowed number of ResourceRecordSets to add per ChangesCreateRequest.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rrsetAdditionsPerChange")]
        public virtual System.Nullable<int> RrsetAdditionsPerChange { get; set; } 

        /// <summary>Maximum allowed number of ResourceRecordSets to delete per ChangesCreateRequest.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rrsetDeletionsPerChange")]
        public virtual System.Nullable<int> RrsetDeletionsPerChange { get; set; } 

        /// <summary>Maximum allowed number of ResourceRecordSets per zone in the project.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rrsetsPerManagedZone")]
        public virtual System.Nullable<int> RrsetsPerManagedZone { get; set; } 

        /// <summary>Maximum allowed size for total rrdata in one ChangesCreateRequest in bytes.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("totalRrdataSizePerChange")]
        public virtual System.Nullable<int> TotalRrdataSizePerChange { get; set; } 

        /// <summary>DNSSEC algorithm and key length types that can be used for DnsKeys.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("whitelistedKeySpecs")]
        public virtual System.Collections.Generic.IList<DnsKeySpec> WhitelistedKeySpecs { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A unit of data that will be returned by the DNS servers.</summary>
    public class ResourceRecordSet : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Identifies what kind of resource this is. Value: the fixed string
        /// "dns#resourceRecordSet".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>For example, www.example.com.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>As defined in RFC 1035 (section 5) and RFC 1034 (section 3.6.1).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rrdatas")]
        public virtual System.Collections.Generic.IList<string> Rrdatas { get; set; } 

        /// <summary>As defined in RFC 4034 (section 3.2).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("signatureRrdatas")]
        public virtual System.Collections.Generic.IList<string> SignatureRrdatas { get; set; } 

        /// <summary>Number of seconds that this ResourceRecordSet can be cached by resolvers.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ttl")]
        public virtual System.Nullable<int> Ttl { get; set; } 

        /// <summary>The identifier of a supported record type, for example, A, AAAA, MX, TXT, and so on.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class ResourceRecordSetsListResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("header")]
        public virtual ResponseHeader Header { get; set; } 

        /// <summary>Type of resource.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("kind")]
        public virtual string Kind { get; set; } 

        /// <summary>The presence of this field indicates that there exist more results following your last page of
        /// results in pagination order. To fetch them, make another list request using this value as your pagination
        /// token.
        ///
        /// In this way you can retrieve the complete contents of even very large collections one page at a time.
        /// However, if the contents of the collection change between the first and last paginated list request, the set
        /// of all elements returned will be an inconsistent view of the collection. There is no way to retrieve a
        /// consistent snapshot of a collection larger than the maximum page size.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The resource record set resources.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("rrsets")]
        public virtual System.Collections.Generic.IList<ResourceRecordSet> Rrsets { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Elements common to every response.</summary>
    public class ResponseHeader : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>For mutating operation requests that completed successfully. This is the client_operation_id if the
        /// client specified it, otherwise it is generated by the server (output only).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operationId")]
        public virtual string OperationId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
